import service from "@/utils/request";

interface renameParmas {
  id: number;
  name: string;
}

/**
 * 获取预览链接
 *
 * @param id 文件ID
 * @returns 返回Promise<any>类型的数据
 */
export function getPreviewUrl(id) {
  return service({
    url: `/file/WpsUrl/getPreviewUrl/${id}`,
    method: 'get',
  })
}

/**
 * 下载文件
 *
 * @param id 文件id
 * @returns 返回下载
 */
export function downloadFiles(id) {
  return service({
    url: `/file/download/previewPath/${id}`,
    method: 'get',
  })
}

/**
 * 获取图片
 * @param id 文件id
 * @returns 返回请求结果，以blob形式响应图片数据
 */
export function getImg(id: string) {
	return service({
		url: '/file/download/preview/' + id,
		method: 'get',
		responseType: 'blob',
	});
}


/**
 * 下载文档
 * @param id 文档ID
 * @returns 返回文档的下载链接
 */
export function downloadDocumentZip(params) {
  return service({
    url: `/file/download/downloadFileOutputZip`,
    method: 'post',
    data: params,
    responseType: 'blob',
  })
  .then((response) => {
    handleBlobFile(response,params.zipName);
  });
}
/**
 * 下载文档
 * @param id 文档ID
 * @returns 返回文档的下载链接
 */
export function downloadDocument(id: string, fileName: string) {
  return service({
    url: `/file/download/downloadFileOutputById/${id}`,
    method: 'post',
    responseType: 'blob',
  }).then((response) => {
    handleBlobFile(response, fileName);
  });
}
/**
 * blob 文件刘处理
 * @param response 响应结果
 * @returns
 */
export function handleBlobFile(response: any, fileName: string) {
  // 处理返回的文件流
  const blob = response;
  if (blob && blob.size === 0) {
    console.error('内容为空，无法下载');
    return;
  }
  const link = document.createElement('a');

  // 兼容一下 入参不是 File Blob 类型情况
  if(blob.type == 'application/zip'){
    link.href = window.URL.createObjectURL(blob);
  }else{
    let binaryData = [] as any;
    binaryData.push(response);
    link.href = window.URL.createObjectURL(new Blob(binaryData));
  }
  link.download = fileName;
  document.body.appendChild(link);
  link.click();
  window.setTimeout(function () {
    // @ts-ignore
    URL.revokeObjectURL(blob);
    document.body.removeChild(link);
  }, 0);
}



/**
 * 上传文件
 *
 * @param type 文件类型
 * @param data 文件数据
 * @returns 返回上传文件结果
 */
export function uploadFiles(data: Object) {
  return service({
    url: '/file/fileDetail/uploadFile',
    method: 'post',
    data,
    headers: {
      'Content-Type': 'multipart/form-data'
    }
  })
}

/**
 * 删除接口
 *
 * @param data 请求参数
 * @returns 返回一个Promise对象，用于处理异步操作结果
 */
export function deleteFile(data) {
  return service({
    url: `/file/fileDetail/delete`,
    method: 'post',
    data,
  })
}

/**
 * 重命名
 *
 * @param data 重命名参数对象
 * @returns 返回service函数调用的结果
 */
export function renameApi(data: renameParmas) {
  return service({
    url: `/file/fileDetail/renameFile`,
    data,
    method: 'post',
  })
}


// 获取wpsUrl
export function getEditUrl(fileId: Number, data) {
  return service({
    url: `/file/WpsUrl/getPreviewUrl/${fileId}`,
    method: 'get',
    data
  })
}

// 获取下载文件链接
export function getDownloadUrl(type, fileName) {
  return service({
    url: `/file/Download/${type}/${fileName}`,
    method: 'get'
  })
}

// 预览文件
export function PreviewFile(data) {
  return service({
    url: `/file/Uploader/Preview`,
    method: 'get',
    data
  })
}


export function fileUpload(type) {
  return service({
    url: `/file/UploaderStore/${type}`,
    method: 'post',
    headers: {
      'Content-Type': 'multipart/form-data'
    }
  })
}